Cloud Foundry 是開放源碼的 PaaS 解決方案,支援多種程式語言、開發框架及資料庫等服務,而且更容易開發、測試及佈署。本系列文章將從零開始,和學習者一起開啟雲端應用程式開發的大門。
關於環境變數、記錄檔及 Instances 數量的調節。
Cloud Foundry 將執行階段使用的參數,透過環境變數方式傳遞給應用程式,這種設計讓不同作業系統及程式語言有共同的存取方法。在前面的章節介紹過 Ruby Sinatra 簡易應用程式的佈署,為了觀察環境變數、方便進行除錯、測試及取得資訊,我們可以用 Sinatra 撰寫簡易的程式,將環境變數 ENV['VCAP\_SERVICES']
完整印出以供開發者參考。
::
require 'sinatra'
get '/env' do
ENV['VCAP_SERVICES']
end
需要注意的地方是安全議題,在一般訪客可以存取的頁面,請勿為了方便將環境變數傾印,這可能會造成系統安全的漏洞。
將應用程式發佈到 Cloud Foundry 雲端時,有可能遇到啟動失敗或執行錯誤的情況,此時需要查看記錄檔進行偵錯。Cloud Foundry 將應用程式的記錄檔案放在雲端儲存空間的 logs
資料夾路徑下,使用以下指令可以列出 logs
資料夾包含的檔案清單:
::
vmc files myfirstblog logs
對於大部分的應用程式,\ logs
資料夾至少會包含以下的記錄檔:
* stdout.log
* stderr.log
上述的檔案從檔名可以判斷,就是對應到標準輸出(STDIN)及標準錯誤輸出(STDOUT)。這是一般應用程式共通的標準,程式在執行時顯示在終端機(Terminal)畫面的文字訊息,Cloud Foundry 會將原本顯示在終端機的訊息重導(redirect)至文字檔,若是一般訊息會儲存到 stdout.log,如果程式發生錯誤就會將訊息則儲存至 stderr.log。
查看記錄檔的方法,可以使用檔案完整的路徑:
::
vmc files myfirstblog logs/stderr.log
另外也可以使用 VMC 提供的 logs
指令,以及用來檢查應用程式當機的 crashes
及 crashlogs
指令:
::
vmc logs myfirstblog
vmc crashes myfirstblog
vmc crashlogs myfirstblog
查詢應用程式目前的執行狀態,可以透過 stats
指令查詢:
::
vmc stats myfirstblog
將應用程式發佈到 Cloud Foundry 等雲端架構的 PaaS 平台,更容易進行水平擴充(scale out)的好處,藉由雲端的基礎設施得到更好的可延展性(scalability);在應用程式需要更大的負載量時,透過增加 Instances 的方式,就可以讓應用程式擁有更多處理器及記憶體的資源。
在預設情況下,Cloud Foundry 的應用程式只會有一個 Instance。
::
+----------+-------------+----------------+--------------+-------------+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime |
+----------+-------------+----------------+--------------+-------------+
| 0 | 0.3% (4) | 54.9M (256M) | 50.0M (2G) | 0d:0h:7m:9s |
+----------+-------------+----------------+--------------+-------------+
增加 Instances 數量,可以讓應用程式效能提昇,因此能承受更高的負載量;由於 PaaS 通常以用量計費,專案開發初期只需要使用一個 Instance 就已足夠,之後隨時可以依照流量增加或減少 Instances 數量。調整 Instance 數量的指令是:
::
vmc instances myfirstblog 3
執行上述的指令,Instances 數量就會擴充為 3 個。Cloud Foundry 的免費方案有記憶體總容量限制,所以 Instances 佔用的記憶體總量不能超過其限制,否則就會顯示調整失敗的訊息。執行成功後,重新以「vmc stats myfirstblog」指令查看狀態,可以發現 Instances 數量已經改變。
::
+----------+-------------+----------------+--------------+--------------+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime |
+----------+-------------+----------------+--------------+--------------+
| 0 | 0.4% (4) | 54.9M (256M) | 50.0M (2G) | 0d:0h:6m:31s |
| 1 | 0.5% (4) | 52.7M (256M) | 50.0M (2G) | 0d:0h:4m:24s |
| 2 | 0.5% (4) | 52.8M (256M) | 50.0M (2G) | 0d:0h:4m:24s |
+----------+-------------+----------------+--------------+--------------+